从 bag 文件中读取数据(C++)

您所在的位置:网站首页 什么in my bag 从 bag 文件中读取数据(C++)

从 bag 文件中读取数据(C++)

2024-07-03 22:15:50| 来源: 网络整理| 查看: 265

从 bag 文件中读取数据(C++)

目标: 在不使用 CLI 的情况下从 bag 中读取数据。

教程级别: 高级

时间: 10分钟

内容

背景

先决条件

任务

1 创建一个包

2 编写 C++ 读取器

3. 构建和运行

总结

背景

rosbag2 不仅提供了 ros2 bag 命令行工具,还提供了用于从您自己的源代码读取和写入 bag 的 C++ API。这允许您读取 bag 中的内容,而无需播放 bag,这在某些情况下可能非常有用。

先决条件

你应该在常规的 ROS 2 配置中安装了 rosbag2 包。

如果你是通过在 Linux 上安装 Debian 包进行安装的,它可能是默认安装的。如果没有安装,可以使用以下命令安装:

sudo apt install ros-humble-rosbag2

本教程讨论了如何使用 ROS 2 bags。您应该已经完成了 基本的 ROS 2 bag 教程,我们将使用您在那里创建的 subset bag。

任务 1 创建一个包

在一个新的终端中 源化你的 ROS 2 安装,这样 ros2 命令才能正常工作。

在新的或现有的 工作空间 中,导航到 src 目录并创建一个新包:

ros2 pkg create --build-type ament_cmake --license Apache-2.0 bag_reading_cpp --dependencies rclcpp rosbag2_cpp turtlesim

您的终端将返回一条消息,验证包 bag_reading_cpp 及其所有必要的文件和文件夹的创建。--dependencies 参数将自动将必要的依赖行添加到 package.xml 和 CMakeLists.txt 中。在本例中,包将使用 rosbag2_cpp 包以及 rclcpp 包。还需要依赖于 turtlesim 包,以便使用自定义 turtlesim 消息。

1.1 更新 package.xml

由于您在软件包创建过程中使用了 --dependencies 选项,因此您无需手动向 package.xml 或 CMakeLists.txt 添加依赖项。但请确保向 package.xml 添加描述、维护者电子邮件和姓名以及许可信息。

C++ bag reading tutorial Your Name Apache-2.0 2 编写 C++ 读取器

在包的 src 目录中,创建一个名为 simple_bag_reader.cpp 的新文件,并将以下代码粘贴到其中。

#include #include #include #include #include #include "rclcpp/rclcpp.hpp" #include "rclcpp/serialization.hpp" #include "rosbag2_cpp/reader.hpp" #include "turtlesim/msg/pose.hpp" using namespace std::chrono_literals; class PlaybackNode : public rclcpp::Node { public: PlaybackNode(const std::string & bag_filename) : Node("playback_node") { publisher_ = this->create_publisher("/turtle1/pose", 10); timer_ = this->create_wall_timer( 100ms, std::bind(&PlaybackNode::timer_callback, this)); reader_.open(bag_filename); } private: void timer_callback() { while (reader_.has_next()) { rosbag2_storage::SerializedBagMessageSharedPtr msg = reader_.read_next(); if (msg->topic_name != "/turtle1/pose") { continue; } rclcpp::SerializedMessage serialized_msg(*msg->serialized_data); turtlesim::msg::Pose::SharedPtr ros_msg = std::make_shared(); serialization_.deserialize_message(&serialized_msg, ros_msg.get()); publisher_->publish(*ros_msg); std::cout


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭